package com.example.ad.sdk.domain.helper

import com.orhanobut.logger.AndroidLogAdapter
import com.orhanobut.logger.Logger


/**
 * LogHelper 是一个用于简化日志记录的工具类，提供了多种日志级别和格式的日志记录方法。
 * 该类使用了单例模式，确保全局只有一个实例。
 */
object LogHelper {
    /**
     * 初始化 LogHelper 实例时，添加一个 AndroidLogAdapter 适配器。
     * 该适配器根据应用的构建配置决定是否记录日志。
     */
    init {
        Logger.addLogAdapter((object : AndroidLogAdapter() {
            override fun isLoggable(priority: Int, tag: String?): Boolean {
                return BuildConfigHelper.isOpenLog
            }
        }))
    }

    /**
     * 记录一条 INFO 级别的日志。
     *
     * @param tag 日志标签，默认为空字符串。
     * @param message 日志消息，默认为空字符串。
     * @param throwable 可选的异常信息，默认为 null。
     */
    fun log(tag: String = "", message : String = "",  throwable: Throwable? = null){
        Logger.log(Logger.INFO, tag, message, throwable)
    }

    /**
     * 记录一条 DEBUG 级别的日志。
     *
     * @param message 日志消息。
     * @param args 用于格式化日志消息的参数。
     */
    fun d(message: String, vararg args: Any?) {
        Logger.d(message, *args)
    }

    /**
     * 记录一条 ERROR 级别的日志。
     *
     * @param message 日志消息。
     * @param args 用于格式化日志消息的参数。
     */
    fun e(message: String, vararg args: Any?) {
        Logger.e(message, *args)
    }

    /**
     * 记录一条 ERROR 级别的日志，并包含异常信息。
     *
     * @param message 日志消息。
     * @param throwable 异常信息。
     * @param args 用于格式化日志消息的参数。
     */
    fun e( message: String, throwable: Throwable?, vararg args: Any?) {
        Logger.e(throwable, message, *args)
    }

    /**
     * 记录一条 INFO 级别的日志。
     *
     * @param message 日志消息。
     * @param args 用于格式化日志消息的参数。
     */
    fun i(message: String, vararg args: Any?) {
        Logger.i(message, *args)
    }

    /**
     * 记录一条 VERBOSE 级别的日志。
     *
     * @param message 日志消息。
     * @param args 用于格式化日志消息的参数。
     */
    fun v(message: String, vararg args: Any?) {
        Logger.v(message, *args)
    }

    /**
     * 记录一条 WARN 级别的日志。
     *
     * @param message 日志消息。
     * @param args 用于格式化日志消息的参数。
     */
    fun w(message: String, vararg args: Any?) {
        Logger.w(message, *args)
    }

    /**
     * 记录一条 ASSERT 级别的日志。
     *
     * @param message 日志消息。
     * @param args 用于格式化日志消息的参数。
     */
    fun wtf(message: String, vararg args: Any?) {
        Logger.wtf(message, *args)
    }

    /**
     * 记录一条 JSON 格式的日志。
     *
     * @param json JSON 字符串。
     */
    fun json(json: String?) {
        Logger.json(json)
    }

    /**
     * 记录一条 XML 格式的日志。
     *
     * @param xml XML 字符串。
     */
    fun xml(xml: String?) {
        Logger.xml(xml)
    }
}
